﻿//200. 岛屿数量
//给你一个由 '1'（陆地）和 '0'（水）组成的的二维网格，请你计算网格中岛屿的数量。
//岛屿总是被水包围，并且每座岛屿只能由水平方向和 / 或竖直方向上相邻的陆地连接形成。
//此外，你可以假设该网格的四条边均被水包围。

class Solution {
public:
    void dfs(vector<vector<char>>& grid, int r, int c)
    {
        if (grid[r][c] == '0')
        {
            return;
        }
        grid[r][c] = '0';
        //上
        if (r - 1 >= 0) dfs(grid, r - 1, c);
        //下
        if (r + 1 < grid.size()) dfs(grid, r + 1, c);
        //左
        if (c - 1 >= 0) dfs(grid, r, c - 1);
        //右
        if (c + 1 < grid[0].size()) dfs(grid, r, c + 1);

    }
    int numIslands(vector<vector<char>>& grid)
    {
        int num = 0;
        for (int i = 0; i < grid.size(); i++)
        {
            for (int j = 0; j < grid[0].size(); j++)
            {
                if (grid[i][j] == '1')
                {
                    num++;
                }
                dfs(grid, i, j);
            }
        }
        return num;
    }
};